// 立即执行的调试代码
console.log('LinkedIn Message Sender: content.js 已加载');

// 自动检测和点击的配置
const AUTO_CLICK_CONFIG = {
  enabled: true,           // 是否启用自动点击
  delay: 3000,            // 页面加载后等待时间（毫秒）
  message: '您好！我对您的专业背景很感兴趣，希望能与您建立联系。', // 默认消息
  autoSend: false         // 是否自动发送消息（false表示只点击发消息按钮）
};

// 立即添加测试按钮
function addTestButton() {
  console.log('LinkedIn Message Sender: 尝试添加测试按钮');
  
  // 检查是否已经存在测试按钮
  if (document.getElementById('linkedin-test-button')) {
    console.log('LinkedIn Message Sender: 测试按钮已存在');
    return;
  }
  
  const testButton = document.createElement('button');
  testButton.id = 'linkedin-test-button';
  testButton.textContent = '🔧 插件测试按钮';
  testButton.style.cssText = `
    position: fixed;
    top: 10px;
    right: 10px;
    z-index: 10000;
    background: red;
    color: white;
    border: none;
    padding: 10px 15px;
    border-radius: 5px;
    cursor: pointer;
    font-size: 12px;
    box-shadow: 0 2px 10px rgba(0,0,0,0.3);
  `;
  
  testButton.addEventListener('click', function() {
    console.log('LinkedIn Message Sender: 测试按钮被点击');
    testClickMessageButton();
  });
  
  document.body.appendChild(testButton);
  console.log('LinkedIn Message Sender: 测试按钮已添加');
}

// 添加自动点击状态指示器
function addAutoClickIndicator() {
  if (document.getElementById('auto-click-indicator')) {
    return;
  }
  
  const indicator = document.createElement('div');
  indicator.id = 'auto-click-indicator';
  indicator.textContent = '🤖 自动点击已启用';
  indicator.style.cssText = `
    position: fixed;
    top: 50px;
    right: 10px;
    z-index: 10000;
    background: #28a745;
    color: white;
    border: none;
    padding: 8px 12px;
    border-radius: 5px;
    cursor: pointer;
    font-size: 11px;
    box-shadow: 0 2px 10px rgba(0,0,0,0.3);
  `;
  
  indicator.addEventListener('click', function() {
    // 点击指示器可以切换自动点击状态
    AUTO_CLICK_CONFIG.enabled = !AUTO_CLICK_CONFIG.enabled;
    indicator.textContent = AUTO_CLICK_CONFIG.enabled ? '🤖 自动点击已启用' : '⏸️ 自动点击已暂停';
    indicator.style.background = AUTO_CLICK_CONFIG.enabled ? '#28a745' : '#ffc107';
    console.log('LinkedIn Message Sender: 自动点击状态切换为:', AUTO_CLICK_CONFIG.enabled);
  });
  
  document.body.appendChild(indicator);
  console.log('LinkedIn Message Sender: 自动点击指示器已添加');
}

// 自动检测和点击函数
async function autoDetectAndClick() {
  if (!AUTO_CLICK_CONFIG.enabled) {
    console.log('LinkedIn Message Sender: 自动点击已禁用');
    return;
  }
  
  try {
    console.log('LinkedIn Message Sender: 开始自动检测和点击');
    
    // 检查是否在LinkedIn个人资料页面
    if (!window.location.href.includes('linkedin.com/in/')) {
      console.log('LinkedIn Message Sender: 不在LinkedIn个人资料页面，跳过自动点击');
      return;
    }
    
    // 等待页面完全加载
    await new Promise(resolve => setTimeout(resolve, AUTO_CLICK_CONFIG.delay));
    
    console.log('LinkedIn Message Sender: 开始查找发消息按钮');
    
    // 查找发消息按钮
    const messageButton = findMessageButton();
    if (!messageButton) {
      console.log('LinkedIn Message Sender: 未找到发消息按钮，跳过自动点击');
      return;
    }
    
    console.log('LinkedIn Message Sender: 找到发消息按钮，准备自动点击');
    
    // 点击发消息按钮
    messageButton.click();
    console.log('LinkedIn Message Sender: 已自动点击发消息按钮');
    
    // 如果配置了自动发送消息
    if (AUTO_CLICK_CONFIG.autoSend) {
      console.log('LinkedIn Message Sender: 准备自动发送消息');
      
      // 等待消息输入框出现
      const messageInput = await waitForMessageInput();
      if (messageInput) {
        // 输入消息
        messageInput.value = AUTO_CLICK_CONFIG.message;
        messageInput.dispatchEvent(new Event('input', { bubbles: true }));
        console.log('LinkedIn Message Sender: 已输入自动消息');
        
        // 等待发送按钮出现并点击
        const sendButton = await waitForSendButton();
        if (sendButton) {
          sendButton.click();
          console.log('LinkedIn Message Sender: 已自动发送消息');
        }
      }
    }
    
  } catch (error) {
    console.error('LinkedIn Message Sender: 自动点击失败:', error);
  }
}

// 测试点击发消息按钮
async function testClickMessageButton() {
  try {
    console.log('LinkedIn Message Sender: 开始测试点击发消息按钮');
    
    // 查找发消息按钮
    const messageButton = findMessageButton();
    
    // 详细检查按钮
    console.log('LinkedIn Message Sender: 查找结果:', messageButton);
    console.log('LinkedIn Message Sender: 按钮类型:', typeof messageButton);
    
    if (!messageButton) {
      alert('未找到发消息按钮！请检查页面是否正确加载。');
      return;
    }
    
    // 检查是否是有效的DOM元素
    if (!(messageButton instanceof Element)) {
      alert('找到的对象不是有效的DOM元素！');
      return;
    }
    
    console.log('LinkedIn Message Sender: 找到发消息按钮:', messageButton);
    console.log('LinkedIn Message Sender: 按钮文本:', messageButton.textContent);
    console.log('LinkedIn Message Sender: 按钮HTML:', messageButton.outerHTML);
    console.log('LinkedIn Message Sender: 按钮标签名:', messageButton.tagName);
    
    // 安全地点击按钮
    try {
      messageButton.click();
      console.log('LinkedIn Message Sender: 已点击发消息按钮');
    } catch (clickError) {
      console.error('LinkedIn Message Sender: 点击按钮时出错:', clickError);
      alert('点击按钮时出错: ' + clickError.message);
      return;
    }
    
    alert('已点击发消息按钮！请查看是否打开了消息对话框。');
    
  } catch (error) {
    console.error('LinkedIn Message Sender: 测试失败:', error);
    alert('测试失败: ' + error.message);
  }
}

// 页面加载完成后的初始化
function initializeAutoClick() {
  console.log('LinkedIn Message Sender: 初始化自动点击功能');
  
  // 添加测试按钮
  addTestButton();
  
  // 添加自动点击指示器
  addAutoClickIndicator();
  
  // 如果是LinkedIn个人资料页面，启动自动检测
  if (window.location.href.includes('linkedin.com/in/')) {
    console.log('LinkedIn Message Sender: 检测到LinkedIn个人资料页面，启动自动检测');
    autoDetectAndClick();
  }
}

// 立即尝试初始化
if (document.readyState === 'loading') {
  document.addEventListener('DOMContentLoaded', initializeAutoClick);
} else {
  initializeAutoClick();
}

// 延迟再次尝试初始化（以防页面动态加载）
setTimeout(initializeAutoClick, 2000);
setTimeout(initializeAutoClick, 5000);

// 监听页面URL变化（SPA应用）
let currentUrl = window.location.href;
const urlObserver = new MutationObserver(() => {
  if (window.location.href !== currentUrl) {
    currentUrl = window.location.href;
    console.log('LinkedIn Message Sender: 检测到URL变化:', currentUrl);
    
    // 如果导航到LinkedIn个人资料页面，重新启动自动检测
    if (currentUrl.includes('linkedin.com/in/')) {
      setTimeout(initializeAutoClick, 1000);
    }
  }
});

urlObserver.observe(document.body, {
  childList: true,
  subtree: true
});

// 监听来自popup的消息
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
  console.log('LinkedIn Message Sender: 收到消息', request);
  if (request.action === 'sendMessage') {
    sendLinkedInMessage(request.message)
      .then(result => {
        sendResponse(result);
      })
      .catch(error => {
        sendResponse({ success: false, error: error.message });
      });
    return true;
  } else if (request.action === 'toggleAutoClick') {
    AUTO_CLICK_CONFIG.enabled = !AUTO_CLICK_CONFIG.enabled;
    const indicator = document.getElementById('auto-click-indicator');
    if (indicator) {
      indicator.textContent = AUTO_CLICK_CONFIG.enabled ? '🤖 自动点击已启用' : '⏸️ 自动点击已暂停';
      indicator.style.background = AUTO_CLICK_CONFIG.enabled ? '#28a745' : '#ffc107';
    }
    sendResponse({ success: true, enabled: AUTO_CLICK_CONFIG.enabled });
    return true;
  }
});

// 发送LinkedIn消息的主要函数
async function sendLinkedInMessage(message) {
  try {
    console.log('LinkedIn Message Sender: 开始发送消息');
    
    // 检查是否在个人资料页面
    if (!window.location.href.includes('linkedin.com/in/')) {
      throw new Error('请在LinkedIn个人资料页面使用此功能');
    }

    console.log('LinkedIn Message Sender: 查找发送消息按钮');
    
    // 查找并点击"发送消息"按钮
    const messageButton = await findMessageButton();
    if (!messageButton) {
      throw new Error('未找到发送消息按钮，可能该用户不允许接收消息');
    }

    console.log('LinkedIn Message Sender: 找到发送消息按钮，准备点击');
    
    // 点击按钮
    messageButton.click();
    console.log('LinkedIn Message Sender: 已点击发送消息按钮');
    
    // 等待消息输入框出现
    console.log('LinkedIn Message Sender: 等待消息输入框出现');
    const messageInput = await waitForMessageInput();
    if (!messageInput) {
      throw new Error('消息输入框未出现');
    }

    console.log('LinkedIn Message Sender: 找到消息输入框，准备输入消息');
    
    // 输入消息
    messageInput.value = message;
    messageInput.dispatchEvent(new Event('input', { bubbles: true }));
    console.log('LinkedIn Message Sender: 已输入消息');
    
    // 等待发送按钮出现并点击
    console.log('LinkedIn Message Sender: 等待发送按钮出现');
    const sendButton = await waitForSendButton();
    if (!sendButton) {
      throw new Error('发送按钮未出现');
    }

    console.log('LinkedIn Message Sender: 找到发送按钮，准备点击');
    
    // 点击发送
    sendButton.click();
    console.log('LinkedIn Message Sender: 已点击发送按钮');
    
    return { success: true, message: '消息发送成功' };
    
  } catch (error) {
    console.error('LinkedIn Message Sender: 发送LinkedIn消息失败:', error);
    return { success: false, error: error.message };
  }
}

// 等待元素出现的辅助函数
function waitForElement(selector, timeout = 10000) {
  return new Promise((resolve, reject) => {
    const element = document.querySelector(selector);
    if (element) {
      resolve(element);
      return;
    }

    const observer = new MutationObserver((mutations, obs) => {
      const element = document.querySelector(selector);
      if (element) {
        obs.disconnect();
        resolve(element);
      }
    });

    observer.observe(document.body, {
      childList: true,
      subtree: true
    });

    setTimeout(() => {
      observer.disconnect();
      reject(new Error(`等待元素 ${selector} 超时`));
    }, timeout);
  });
}

// 查找发送消息按钮 - 基于截图信息优化
function findMessageButton() {
  console.log('LinkedIn Message Sender: 开始查找发送消息按钮');
  
  // 基于截图的精确选择器
  const selectors = [
    // 通过aria-label查找（最精确）
    'button[aria-label*="发消息"]',
    'button[aria-label*="发送消息"]',
    'button[aria-label*="Send message"]',
    
    // 通过包含"发消息"文本的span查找
    'button:has(span.artdeco-button__text:contains("发消息"))',
    'button:has(span:contains("发消息"))',
    
    // 通过类名查找
    'button.artdeco-button--primary:has(span:contains("发消息"))',
    
    // 通用选择器
    'button[data-control-name="send_message"]',
    'button[data-control-name="message"]'
  ];

  for (const selector of selectors) {
    try {
      const button = document.querySelector(selector);
      if (button && button.offsetParent !== null) {
        console.log('LinkedIn Message Sender: 通过选择器找到按钮:', selector);
        return button;
      }
    } catch (e) {
      console.log('LinkedIn Message Sender: 选择器失败:', selector, e);
      continue;
    }
  }

  // 如果选择器都失败，通过文本内容查找
  console.log('LinkedIn Message Sender: 通过文本查找按钮');
  const allButtons = document.querySelectorAll('button');
  console.log('LinkedIn Message Sender: 找到按钮总数:', allButtons.length);
  
  for (let i = 0; i < allButtons.length; i++) {
    const button = allButtons[i];
    const text = button.textContent.trim().toLowerCase();
    
    if (text.includes('发消息') || text.includes('消息')) {
      console.log(`LinkedIn Message Sender: 找到匹配的按钮${i}: "${text}"`);
      console.log('LinkedIn Message Sender: 按钮可见性:', button.offsetParent !== null);
      
      if (button.offsetParent !== null) {
        return button;
      }
    }
  }

  console.log('LinkedIn Message Sender: 未找到发送消息按钮');
  return null;
}

// 等待消息输入框出现
async function waitForMessageInput() {
  const selectors = [
    'textarea[placeholder*="消息"]',
    'textarea[placeholder*="Message"]',
    'textarea[placeholder*="写消息"]',
    'div[contenteditable="true"][data-placeholder*="消息"]',
    'div[contenteditable="true"][data-placeholder*="Message"]',
    'textarea[aria-label*="消息"]',
    'textarea[aria-label*="Message"]',
    'div[contenteditable="true"]'
  ];

  for (const selector of selectors) {
    try {
      const input = await waitForElement(selector, 5000);
      if (input) return input;
    } catch (e) {
      continue;
    }
  }

  return null;
}

// 等待发送按钮出现
async function waitForSendButton() {
  const selectors = [
    'button[aria-label*="发送"]',
    'button[aria-label*="Send"]',
    'button:contains("发送")',
    'button:contains("Send")',
    '[data-control-name="send"]',
    'button[data-control-name="send"]'
  ];

  for (const selector of selectors) {
    try {
      const button = await waitForElement(selector, 5000);
      if (button && button.offsetParent !== null) {
        return button;
      }
    } catch (e) {
      continue;
    }
  }

  return null;
}